//
//  CZOAuthViewModel.swift
//  CZVVeiBo
//
//  Created by smile on 2017/7/31.
//  Copyright © 2017年 itcast. All rights reserved.
//

import UIKit
/*
    - 帮助OAuthVc请求数据 和保存数据和给其他类提供数据
 */

class CZOAuthViewModel: NSObject {
    
    // 全局访问点
    static let share:CZOAuthViewModel = CZOAuthViewModel()
    // 记录沙盒保存的用户数据
    var userAccountModel: CZUserAccountModel?
    // 路径
    let file = (NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last! as NSString).appendingPathComponent("userAccount.archiver")
    // 访问令牌
    var accessToken:String?{
        // 用户没有保存过数据
        if userAccountModel?.access_token == nil {
            return nil
        }else{
            // 用户保存过个人信息数据
            // 没有过期（orderedDescending 降序）
            if userAccountModel?.expires_Date?.compare(Date()) == ComparisonResult.orderedDescending {
                return userAccountModel?.access_token
            }else{
                return nil
            }
        }
    }
    // 判断用户是否登陆的标识
    var isLogin: Bool{
        return accessToken != nil
    }
    
    override init() {
        super.init()
        //userAccountModel 赋值
        userAccountModel = getUserAccountModel()
    }
    
    
}
// MARK: - 请求数据
extension CZOAuthViewModel{
    // 获取访问令牌
    func loadUserAccount(code: String, isFinish:@escaping (Bool)->()){
        
        CZNetworkTools.share.getOAuthUserAccount(code: code, success: { (response) in
            // 判断response 是否为nil 而且是否是一个字典
            guard let res = response as? [String: Any] else{
                isFinish(false)
                return
            }
            // 判断userAccountModel是否为nil
            guard let userAccountModel = CZUserAccountModel.yy_model(withJSON: res) else{
                isFinish(false)
                return
            }
            self.loadUserInfo(userAccountModel: userAccountModel, isFinish: isFinish)
        }) { (error) in
            print("失败",error)
            isFinish(false)
        }
    }
    
    // 获取个人信息
    func loadUserInfo(userAccountModel: CZUserAccountModel, isFinish:@escaping (Bool)->()){
        
        CZNetworkTools.share.getOAuthUserInfo(userAccountModel: userAccountModel, success: { (response) in
            // 判断response是否为nil 而且是否可以转成一个字典
            guard let res = response as? [String: Any] else{
                isFinish(false)
                return
            }
            // 赋值
            userAccountModel.screen_name = res["screen_name"] as? String
            userAccountModel.avatar_large = res["avatar_large"] as? String
            self.saveUserAccountModel(model: userAccountModel)
            // 保存数据成功
            isFinish(true)
        }) { (error) in
            print("失败", error)
            isFinish(false)
        }
    }
}
// MARK: - 保存和获取用户数据
extension CZOAuthViewModel{
    // 保存数据到沙盒
    func saveUserAccountModel(model: CZUserAccountModel){
        // 解决首次登陆该app 保存数据后得到不到数据的bug 需要手动赋值
        userAccountModel = model
        // 保存
        NSKeyedArchiver.archiveRootObject(model, toFile: file)
    }
    
    // 获取用户信息数据
    func getUserAccountModel() -> CZUserAccountModel?{
        // 获取数据
        let result = NSKeyedUnarchiver.unarchiveObject(withFile: file) as? CZUserAccountModel
        return result
    }
}
